function autoSort(originData,sortKeys){

  // 将第一个装入结果栈
  let resArr=[originData[0]]
  originData.shift()

  mate()
  return resArr

  function mate(){
    if (originData.length===0){
      return
    }

    // 取出上一条数据
    let tmpArr=[...originData]
    let lastObj=resArr[resArr.length-1]

    // 根据上一条数据精细查找
    for (let key of sortKeys){
      let tmp=filterData(key,lastObj[key],tmpArr)
      if (tmp.length!==0){
        tmpArr=tmp
      }
    }

    // 每次只推进一个结果
    resArr.push(tmpArr[0])
    originData=deleteData(originData,tmpArr[0])

    mate()
  }

  // 从原始数据中找到指定键值的数据
  function filterData(dKey,dValue,originData){
    let res=[]
    for (let item of originData){
      for (let key of Object.keys(item)){
        if (key===dKey && dValue===item[key]){
          res.push(item)
        }
      }
    }

    return res
  }

  // 从数组中删除指定的对象
  function deleteData(arr,obj){
    return arr.filter(function(item){
      let flag=false
      for (let key of Object.keys(obj)){
        if (item[key]!==obj[key]){
          flag=true
        }
      }
      return flag
    })
  }
}

// console.log('res!!!',autoSort(data))




function getMergePoints(data,sortKeys){
  let resArr=[]

  data.forEach(function(item,index){
    let max=data.length
    
    for (let key of sortKeys){
      let deep=downDz(key,item[key],index,max)
      if (deep>1 && !scand(key,index)){
        resArr.push({
          index:index,
          field:key,
          colspan:1,
          rowspan:deep
        })
      }
      max=index+deep

      
    }
  })

  return resArr

  // 向下探针
  function downDz(dField,dValue,dIndex,dMax){
    let res=0
    for (let i=dIndex;i<dMax;i++){
      if (data[i][dField] && data[i][dField]===dValue){
        res++
      }
    }

    return res
  }

  // 是否扫描该点
  function scand(dField,dIndex){
    for (let item of resArr){
      if (item.field===dField && dIndex>=item.index && dIndex<(item.index+item.rowspan)){
        return true
      }
    }
    return false
  }
}